﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SMA.GENTEv1.Dados;

namespace SMA.GENTEv1
{
    public class OrganizacaoFornecedor
    {
        #region Variaveis Membro
        private int _idOrganizacaoRelacaoFornecedor;
        private int _idOrganizacaoPrestador;
        private int _idOrganizacaoFornecedor;
        private Organizacao _fornecedor;
        private Status _status;
        private GENTEEntities _context;
        #endregion

        #region Parametros
        public int IdOrganizacaoRelacaoFornecedor
        {
            get { return _idOrganizacaoRelacaoFornecedor; }
            set { _idOrganizacaoRelacaoFornecedor = value; }
        }
        public int IdOrganizacaoPrestador
        {
            get { return _idOrganizacaoPrestador; }
            set { _idOrganizacaoPrestador = value; }
        }
        public int IdOrganizacaoFornecedor
        {
            get { return _idOrganizacaoFornecedor; }
            set { _idOrganizacaoFornecedor = value; }
        }
        public Status Status
        {
            get { return _status; }
            set { _status = value; }
        }
        public Organizacao Fornecedor
        {
            get { return _fornecedor; }
            set { _fornecedor = value; }
        }
        #endregion

        #region Construtores
        public OrganizacaoFornecedor()
        {
            try
            {
                _context = new GENTEEntities();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public OrganizacaoFornecedor(int idOrganizacaoRelacaoFornecedor)
        {
            try
            {
                _context = new GENTEEntities();
                Carregar(idOrganizacaoRelacaoFornecedor);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Privados
        private void Carregar(int idOrganizacaoRelacaoFornecedor)
        {
            try
            {
                var consulta = from orf in _context.tab_organizacao_relacao_fornecedor
                               where orf.id_organ_relacao_forn == idOrganizacaoRelacaoFornecedor
                               select new { orf.id_organ_relacao_forn, id_organ_prestador = orf.tab_organizacao.Id_organizacao, id_organ_fornecedor = orf.tab_organizacao1.Id_organizacao, orf.tab_status.id_status };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this._idOrganizacaoRelacaoFornecedor = list.id_organ_relacao_forn;
                    this._idOrganizacaoPrestador = list.id_organ_prestador;
                    this._idOrganizacaoFornecedor = list.id_organ_fornecedor;
                    this._status = new Status(list.id_status);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Publicos
        public List<OrganizacaoFornecedor> SelectAll()
        {
            try
            {
                List<OrganizacaoFornecedor> listOrganizacaoFornecedor = new List<OrganizacaoFornecedor>();

                var consulta = from orf in _context.tab_organizacao_relacao_fornecedor
                               select new { orf.id_organ_relacao_forn, id_organ_prestador = orf.tab_organizacao.Id_organizacao, id_organ_fornecedor = orf.tab_organizacao1.Id_organizacao, orf.tab_status.id_status };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    OrganizacaoFornecedor organizacaoFornecedor = new OrganizacaoFornecedor();
                    organizacaoFornecedor._idOrganizacaoRelacaoFornecedor = list.id_organ_relacao_forn;
                    organizacaoFornecedor._idOrganizacaoPrestador = list.id_organ_prestador;
                    organizacaoFornecedor._idOrganizacaoFornecedor = list.id_organ_fornecedor;
                    organizacaoFornecedor._status = new Status(list.id_status);

                    listOrganizacaoFornecedor.Add(organizacaoFornecedor);
                }
                return listOrganizacaoFornecedor;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<OrganizacaoFornecedor> SelectFornecedor(int idOrganizacaoPrestador)
        {
            try
            {
                List<OrganizacaoFornecedor> listOrganizacaoFornecedor = new List<OrganizacaoFornecedor>();

                var consulta = from orf in _context.tab_organizacao_relacao_fornecedor
                               where orf.tab_organizacao.Id_organizacao == idOrganizacaoPrestador
                               select new { orf.id_organ_relacao_forn, id_organ_prestador = orf.tab_organizacao.Id_organizacao, id_organ_fornecedor = orf.tab_organizacao1.Id_organizacao, orf.tab_status.id_status };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    OrganizacaoFornecedor organizacaoFornecedor = new OrganizacaoFornecedor();
                    organizacaoFornecedor._idOrganizacaoRelacaoFornecedor = list.id_organ_relacao_forn;
                    organizacaoFornecedor._idOrganizacaoPrestador = list.id_organ_prestador;
                    organizacaoFornecedor._idOrganizacaoFornecedor = list.id_organ_fornecedor;
                    organizacaoFornecedor._status = new Status(list.id_status);

                    listOrganizacaoFornecedor.Add(organizacaoFornecedor);
                }
                return listOrganizacaoFornecedor;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<OrganizacaoFornecedor> SelectPrestador(int idOrganizacaoFornecedor)
        {
            try
            {
                List<OrganizacaoFornecedor> listOrganizacaoFornecedor = new List<OrganizacaoFornecedor>();

                var consulta = from orf in _context.tab_organizacao_relacao_fornecedor
                               where orf.tab_organizacao1.Id_organizacao == idOrganizacaoFornecedor
                               select new { orf.id_organ_relacao_forn, id_organ_prestador = orf.tab_organizacao.Id_organizacao, id_organ_fornecedor = orf.tab_organizacao1.Id_organizacao, orf.tab_status.id_status };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    OrganizacaoFornecedor organizacaoFornecedor = new OrganizacaoFornecedor();
                    organizacaoFornecedor._idOrganizacaoRelacaoFornecedor = list.id_organ_relacao_forn;
                    organizacaoFornecedor._idOrganizacaoPrestador = list.id_organ_prestador;
                    organizacaoFornecedor._idOrganizacaoFornecedor = list.id_organ_fornecedor;
                    organizacaoFornecedor._status = new Status(list.id_status);

                    listOrganizacaoFornecedor.Add(organizacaoFornecedor);
                }
                return listOrganizacaoFornecedor;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

    }
}
